%% Test polaczen
% ...


%% Generuj wspolrzedne przystankow na podstawie k_means i przykladowego rozkladu ludzi
% w _center_of_cluster_ daje:
% X | Y | W
%
% * X i Y wspolrzedne srodkow przystankow
% * W waga przystanku - ile obsluguje ludzi
kmeans_test1;


%% Odleglosci miedzy przystankami - wagi krawedzi - odleglosc kazdy z kazdym
distances = generate_distances(center_of_cluster(:,1:2));


%% Generuj przykladowo macierz grafu - tu kryterium wyboru jest dlugosc drogi miedzy punktmi - decyduje czy jest dana krawedz

adjacency = (distances<7);  % example purposes 
mask = mask_generator( adjacency ); %1./(distances<7) - 1;

graph_distances = distances + mask;


%% Szukanie najkrotszych sciezek miedzy wezlami
shortest_paths = FastFloyd(graph_distances);


%% Sprawdzenie spojnosci
if find( shortest_paths == inf )
    disp( 'Graf niespojny' )
else
    disp( 'Graf spojny' )
end

%% Rysowanie grafu
%clf;
wgPlot(graph_distances + diag(center_of_cluster(:,3)),center_of_cluster(:,1:2),true);
% Numery wierzcholkow w kolejnosci wpisywania wspolrzednych punktow.
for i = 1: number_of_clusters
        text(center_of_cluster(i,1),center_of_cluster(i,2),int2str(i),'FontSize',15,'HorizontalAlignment','Center','VerticalAlignment','Top');

end
 
 
%% Korekcja macierzy
% Jesli graf jest nie spojny
% Nie mozna go calkiem wywalic tj. funkcja celu nieskonczonosc, pod katem
% dziedziecznia liczy sie roznorodnosc
% Wierzcholki nie polaczone zamiast odleglosci Inf, beda mialy duza
% liczbe...

max_distance = max(max(distances));
scale_factor = 100;
for i=1:number_of_clusters
    for j=1:number_of_clusters
        if(shortest_paths(i,j) == Inf)
            shortest_paths(i,j) = max_distance * scale_factor * number_of_clusters;
        end
    end
end

%% Obliczanie funkcji celu

b = 1;  %cost factor
o = objective(shortest_paths, center_of_cluster(:,3), b*cost( distances, adjacency ) )


